对于经常要远程操作服务器的代码,以前都是方式,一种通过FTP下载、编辑、上传文件的过程,或则直接在远程服务器上用VIM直接对文件进行操作。
VSC的SSH Remtoe插件,允许用户像操作本地文件一样,操作远程服务器的文件,还可以进行远程调试。
进行远程访问需要几个主要步骤:
- 在本地生成SSH私、公有秘钥。
- 在远程服务器上创建访问Key文件。
- 配置VSC的与.SSH文件夹中的config文件建立练习。
- 设置SSH客户端。
- config的文件绝对位置。
1.生成公钥和私钥。
用ssh-keygen在当前用的的~/.ssh中生成公钥和私钥,然后,将公钥制复制到远端服务的用户的~/.ssh中的authorized_keys文件中。
ssh-keygen
用~/.ssh作当前工作目录,执行命令测试不通过密码SSH登录是否可以成功。 ssh -i id_rsa candylab@192.168.1.11 如要不需要输入密码就可以登录,说明配置成功了。
2.创建authorized_key文件
上面也说了,要在远端要登录的服务器上的当前用的~/.ssh目录下,创建一个文件,authorized_key, 这个文件的内容,就是你本地ssh-keygen生成的公钥。
3.通过那个用户名,登录服务器的那个IP,这些都是在config文件中配置的,然后用户根据这个文件的配置列表,让VSC选择登录。
Host 192.168.1.11
HostName 192.168.1.11
User candylab
IdentityFile C://users//candylab//.ssh//id_rsa
- 如果在windows上,Windows 10会有自己SSH客户端,如果用了WSL或者MinGW,就会有OpenSSH作为SSH客户端,因为Windows自带的SSH有问题,一般都是用MinGW的SSH或者WSL中的SSH客户端。
5.Config文件也是现样的道理,都可以在插件的配置选项中进行设置。
排错。 1.删除本地的knonwhost文件。
有时候,再用VSC的远程SSH插件访问,服务器时,甚至根本不上链接,这时候就可以选择清空knownhost。有时候是命令行好用,而VSC不好用。
2.对于远程服务器,DNS有问题,或者无法下载微软的VSCode的文件,进行本地手动DNS修改,或者人工下载上传到服务器上。
VSC远程控制插件,不只是要在本地安装软件,还要在远程服务器上的特点目录,安装相应的文件软件。
在登录到的目标远程服务器上, 会在用户的根目录下~/.vscode-server, 上传日志文件、扩展文件等。在远端服务上器成功配置了,本地的公开秘钥,就可以进行SSH通信了,并且在用户的目录下~/.vscode-server, 生成对应的类似vscode-server-linux-x64.tar.gz这种文件。
一般情况下,在选定远端服务的类型后,的就会下载对应的文件, 但有时候,因为远端的服务器DNS无法解析微软的服务器,或者根本访问不了外网,就需要设定本地DNS,或者在本机下载再上传上去。
如果出现下面这种提示:“Error: Running the contributed command: ‘_workbench.downloadResource’ failed”
就说明在远端服务器,下载对应的资源不成功,这种情况可以在在本地手动下载。
如果是因为本地DNS原始,最快速方法是在本地对Host文件的特定域名,强行制定到某个可用于下载文件的IP。
针对VSC的两种版本:Stable、Insiders,下载的位置,如下:
https://update.code.visualstudio.com/commit:$COMMIT_ID/server-linux-x64/stable
https://update.code.visualstudio.com/commit:$COMMIT_ID/server-linux-x64/inside
将$COMMIT_ID用远端~/.vscode-server中的一长串的子目录名替换,下载,然把对应的下载的vscode-server-linux-x64.tar.gz,放到这个目录,并进行解压。
重新登录后,即可完成的在VSC实现远程访问的功能。
## 使用VSC进行服务器端的Lua程序远程调试
使用VSC进行远程登录, 为了不对root用户下的配置数据产生污染和影响,最好办法是独立创建一个用户,在新建的用户创建访问key等配置文件,如果不再需要相关的配置,就可以直接删除掉这个用户。
后续如果做Lua远程开发调试,需要在特定用户的根目录下,安装Luarocks第三方库,或者安装VSC SSH插件、远程调试插件。这些文件都是放到特定用户名的目录下,为了保证各种开发环境的插件和第三方库,不产生不必要的冲突,可以针对特定语言开发上换进创建特定用户。
## 创建用户
useradd lua -m
加-m参数,会在/home目录下,对应创建一个lua文件夹。之后我们创建的.ssh相关文件,Luarocks本地安装的库的文件,都在这个目录下。
passwd
创建完新用户后,要修改一下用户的密码,在之的使用sudo执行root权限时,也要使用这个密码。
给用户赋予ROOT权限
使用visudo命令打开root管理配置文件,找到如下配置,如下:
# User privilege specification
root ALL=(ALL:ALL) ALL
candylab ALL=(ALL:ALL) ALL
lua ALL=(ALL:ALL) ALL
在配置文件中加入lua用户的配置。
给当前用户设置公私钥
ssh-keygen -t rsa -b 4096 -C "lua"
命令执行后,会创建的一个公私钥,在/home/lua/.ssh文件夹中。这两个文件展示不需要。需要的是.ssh这个文件夹。
这个命令,我们要在本地Windows客户端上,或者有桌面系统的Linux、Mac OS系统中某个用户下执行,也会同样的生成公私钥,比如我们在windows上执行这个命令,使用的用户的是tangguo,会在C:\users\tangguo.ssh文件夹中生成id_rsa和id_rsa.pub,这两个文件。
然后,我们需要将公钥文件,id_rsa.pub内容进行复制,在远程服务器上创建的一个叫authorized_keys的文件,将公钥的内容贴入进去。这样VSC才可以通过SSH远程插件访问进入远程服务器。
在远程服务器上创建这个文件后,可以在客户端的命令行窗口中,进行测试,如下:
cd c:\user\lua\.ssh
ssh -i id_rsa lua@192.168.1.5
如果可以成功登录,说明客户端与服务器之间的SSH正常通信访问是没问题的。
如果在用VSC的SSH插件与服务器进行通信,出现know_hosts文件冲突,可将本地的know_hosts文件删除。
[10:31:25.425] "install" terminal command done
[10:31:25.426] Install terminal quit with output: 过程试图写入的管道不存在。
[10:31:25.426] Received install output: 过程试图写入的管道不存在。
[10:31:25.427] Failed to parse remote port from server output
[10:31:25.427] Resolver error: Error:
有时候虽然最后的报错都是“过程度图写入的管道不存在”,但不一定是由know_hosts冲突引起的。比如,我在家中的VSC与单位工作时的VSC的配置是同步的,不同的是git安装目录位置不一样,在单位同步过来的SSH客户端的SSH执行命令位置,是家里电脑的git安装目录位,就找不到OpenSSH可以执行程序,使用了Windows自带的OpenSSH,也会造成这个提示,无法连接远程服务器。
## 配置VSC客户端 在用VSC的SSH插件访问之前,我们需要在.ssh目录下配置一个叫config文件,VSC的SSH插件在访问的远程服务器时候,会读取这个文件,如下:
Host 192.168.1.11
HostName 192.168.1.11
User lua
IdentityFile C://users//candylab//.ssh//id_rsa
Host的是主机的别名,HostName是主机有IP,User就访问的用户名,IdentifiFile就是指定私钥文件。
## 安装VSC服务器端插件
如果想实现Lua远程调试,需要在VSC的插件选项卡里,搜索到指定的插件,进行安装,VSC会通过 SSH协议像远程调试的服务器端程序,上传到远程服务器上之后,即可在客户端进行远程Lua程序的调试。
## 安装Luarocks Luarocks是安装第三方Lua库的管理工具。可以通过Luarocks快速的安装所需要的各种Lua库,Luarocks的库可以直接按名字进行远程安装,又可以先下载,然后再进行本地化安装。可以装将库只装到当前用户的目录,又可以将库装到公用目录。
大多的Luarocks教程,主要介绍** Luarocks Install ** 为主,并不过多的区分是远程安装,或是本地安装,此篇中,对此加以详细一些的介绍。
安装可以用系统工具安装,也可以用二进制包安装,也可以用源码安装都可以,没有特殊的情况,推荐使用前两才方式进行安装。
如果是在Windows平台上安装,只要下载二进制的安装就可以了,如下:
https://github.com/rjpcomputing/luaforwindows/releases
https://github.com/rjpcomputing/luaforwindows
如果Linxu的上安装就比较方便,以下:
apt install luarocks
apt这种安装方式,会根据不同的操作系统,安装不同版本的Luarocks,并不一定是最新版本。
Luarocks的库安装
Luarocks安装的第三方库,可以安装在当前用户,也可以安装在系统公用目录, root用户都可以。可以先下载rock文件的再进行安装,也可以用Luarocks的Install命令安装。
sudo luarocks install markdown
用管理员安装的rock,是安装在/usr/local
luarocks install markdown --local
如果加上–local参数,rock是安装在/home/candylab/.luarocks
如果用–local时,不要加sudo, 直接安装到当前目录的用户。安装后 用sudo luarocks list显示的root用户安装过的Rocks,是没有安装markdown的。
luarocks list显示当前用户安装的rock,才能显示出来安装的Rock有Markdown。
如果你在当前用户,运行lua5.3,require”markdown”,Lua会提示找不到这个包。 需要export出/home/candylab/.luarocks这个目录位置,设置到环境变量,或者直接在Lua你文件中设置环境变量。
Luarocks远程安装
Luarocks远程安装比较简便,直接使用Luarocks的Install命令来安装
用Markdown库作为例子进行安装举例。
luarocks install markdown
再用Luarocks list就可以列出已经安装过的包。
luarocks list
### Luarocks本地安装 Luarocks可能会在安装的过程中,出现网络状况不好的情况,Rock文件很难从官方网站上下载下来,这种情况,我们可以通过其他路径,非安装的其他机器上下载Rock文件,然后在上传到对应的机器上进行安装。
wget http://luarocks.org/markdown-0.33-1.src.rock
luarocks unpack markdown-0.33-1.src.rock
cd markdown-0.33-1\markdown\
** Luarocks 2.02版本下安装 **
luarocks make markdown-0.33-1.rockspec
--local
--lua-dir d:\gnu\lua\5.1
还可以加上gcc的编译参数,带上debug信息,coredump的时候也好用bt看调用栈信息。
CC="gcc -g"
安装本地目标,非系统目录。
luarocks install markdown --local
** Luarocks 3.7版本下安装 **
Luarocks3.7版本中有–local这个参数, Luarocks安装不成.so的纯 Lua库是不需要引用Lua执行文件和.H头文件的位置的,像早期的LFS这种库,就需要指点相应文件目录的位置。
并且可以通过下面的命令告诉Luarocks,lua.h的位置。
luarocks config variables.LUA_INCDIR <dir>
Lua Path
Luarocks 3.7 可以看到Lua的Path信息,如下:
luarocks path
lua-dir 与 LUA_INCDIR
如果Path信息里没有相关的信息,需要在执行Luarocks进行指定。
luarocks-admin --lua-dir d:\gnu\lua\5.1 LUA_INCDIR='d:\gnu\lua\5.1\include'
如果是在Ubuntu Linux上安装LFS这种库,就需发lua.h文件,以Lua 5.3为例,需要安装Lua开发包,这样也可以不用在安装时指定.H文件的位置。
sudo apt install liblua5.3-dev
安装Develop开发包,安装时才能找到 .H文件。为了方便查找,也可以装一个mlocate.
sudo apt install mlocate
然后,我们在当前用户的Home目录中安装lFS。
luarocks install luafilesystem --local
安装过程中,会自动执行如下的动作。
Installing https://luarocks.org/luafilesystem-1.8.0-1.src.rock
gcc -O2 -fPIC -I/usr/include/lua5.3 -c src/lfs.c -o src/lfs.o
gcc -shared -o lfs.so -L/usr/local/lib src/lfs.o
luafilesystem 1.8.0-1 is now installed in /home/lua/.luarocks (license: MIT/X11)
Luafilesystem是.so文件和.lua库安装位置是不同的。
/home/lua/.luarocks/lib/lua/5.3
Lua库使用
因为上面采用了–local的方式进行安装的,所以库文件是在当前用户目录的,需设置环境变量,或者在Lua程序代码指明的,下面采用在Lua代码中指明的方式进行调用。
package.path = package.path..";/home/lua/.luarocks/share/lua/5.3/?.lua";
package.cpath = package.cpath..";/home/lua/.luarocks/lib/lua/5.3/?.so";
require "markdown"
require "lfs"
text1="## test"
md = markdown(text1)
for entry in lfs.dir("../") do
print(entry)
end
package.path指明的是.Lua库文件的位置。package.cpath指名的是.so库文件的位置。
## Heng静态网站生成框架
Heng是基于OpenResty的一个软件,Web框架功能集合静态网站生成工具,可以将Markdown文件集,生成静态的HTML文件。
Heng采用的是纯脚本的安装方式, 纯Lua代码,可以直接进行解译执行,并不需要makefile进行Lua、或其他库之间的依赖关联。 项目代码规模比较小,直接使用shell脚本进行安装管理。
git clone https://github.com/shengnoah/heng.git
cd blues
sudo sh install.sh
Heng的操作常用操作用命令方式完成,如下:
Heng v0.1, a Lua web framework based on OpenResty.
Usage: Heng COMMAND [OPTIONS]
Commands:
new [name] Create a new application
start Starts the server
stop Stops the server
restart Restart the server
version Show version of framework
build Convert Markdown to HTML
path Show framework install path
help Show help tips
Start、Stop、Restart命令是用于开始、关闭、重起OpenResty服务,而Build命令是执行Markdown翻译成HTML的工作。
### Heng的使用
Heng的常用操作由命令行来完成。使用简洁的命令行操作,进行OpenResty服务的开始、关闭、重启,Markdown文件的构建。Heng支持简单模板支持,用于索引Markdown文件生成的HTML文件目录,并且提供了一个简单的路由展示功能。
#### 1.安装
git clone https://github.com/shengnoah/blues.git
cd blues
sudo sh install.sh
2.创建项目
hi new blues
3.创建应用
local bjson = require "utils.bjson"
local app = require "blues"
app:get("/blues", function(self)
return "blues"
end)
app:get("/json", function(self)
local t = bjson.decode(self.req.body)
return t
end)
return app
4.启动服务
hi start
hi stop
hi restart
5.启动服务
测试接口
curl -X GET http://0.0.0.0:8888/json -d '{"key":"value"}'
返回结果?
{"key":"value"}